#include "drv_usart.h"
#include "drv_led.h"
#include "drv_fan.h"
#include "drv_motor.h"
#include "drv_deep.h"



void drv_USART6_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	USART_InitTypeDef USART_InitStruct;
	NVIC_InitTypeDef NVIC_InitStruct;//misc.c

	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6,ENABLE);
	
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_14;
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
	GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
	
	//指定引脚复用的具体功能为USART6
	GPIO_PinAFConfig( GPIOG, GPIO_PinSource9, GPIO_AF_USART6);
    GPIO_PinAFConfig( GPIOG, GPIO_PinSource14,GPIO_AF_USART6);
	
	GPIO_Init(GPIOG, &GPIO_InitStruct);

	USART_InitStruct.USART_BaudRate=115200;//波特率
	//USART_HardwareFlowControl是 STM32 标准库中用于配置 USART（通用同步异步收发器）硬件流控制模式的参数，
	//用于控制串行通信中数据传输的流量，避免因接收方处理不及时导致的数据丢失。
	USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
	USART_InitStruct.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;
	//SART_Parity 用于配置 USART 通信的奇偶校验模式，是一种简单的错误检测机制。
	USART_InitStruct.USART_Parity=USART_Parity_No;
	USART_InitStruct.USART_StopBits=USART_StopBits_1;
	USART_InitStruct.USART_WordLength=USART_WordLength_8b;
	USART_Init(USART6, &USART_InitStruct);

	USART_ITConfig(USART6, USART_IT_RXNE,ENABLE);//开启接收中断
	//配置中断
	NVIC_InitStruct.NVIC_IRQChannel=USART6_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStruct);
	
	USART_ClearFlag(USART6, USART_FLAG_TC);
	USART_Cmd(USART6, ENABLE);
	
}

//重构fput函数，使用我写的代替C库里的fput函数
int fputc(int ch,FILE *f)
{
	USART_SendData(USART6,ch);
	while(USART_GetFlagStatus(USART6, USART_FLAG_TC)==RESET);
	USART_ClearFlag(USART6, USART_FLAG_TC);
	return ch;
}







